/**
 * 
 */
package com.feib.stms.dao;

import java.util.List;

import com.feib.stms.model.MenuItem;
import com.feib.stms.model.Role;
import com.feib.stms.model.User;

/**
 * @author Jimmy Liu
 *
 */
public interface RoleDao {

	public List<Role> getByUserPk(User user);
	
    public List<Role> findByGroupPk(String groupPk);

	public List<Role> getByMenuItemPk(MenuItem menuItem);
	
	/**
	 * 新增角色
	 * @param role
	 * @return
	 */
	public int insert(Role role);
	
	/**
	 * 根據pk查詢角色
	 * @param rolePk
	 * @return
	 */
	public Role getByRolePk(String rolePk);
	
	/**
	 * 根據PK找到有權限的菜單 PK
	 * @param roleId
	 * @return
	 */
	public List<String> getMenuItemPkByRoleId(String roleId);
	
	/**
	 * 查詢所有的系統功能角色
	 * @return
	 */
	public List<Role> getAllSystemRole();
	
	/**
	 * 列出該功能角色下的所有用戶
	 * @param rolePk
	 * @return
	 */
	public List<User> getAllSelectedRoleUser(String rolePk);
	
	/**
	 * 列出當前GROUP下的所有用戶
	 * @param rolePk
	 * @param userGroupPk
	 * @return
	 */
	public List<User> getAllSelectedRoleUserByGroupPk(String rolePk, Long userGroupPk);
	
	/**
	 * 列出當前GROUP下的用戶(除以選擇的用戶外)
	 * @param rolePk
	 * @param userGroupPk
	 * @return
	 */
	public List<User> getAllUnSelectedRoleUserByGroupPk(String rolePk, Long userGroupPk);
	
	/**
	 * 新增角色菜單權限
	 * @param menuItemPk
	 * @param rolePk
	 * @return
	 */
	public int insertRoleMenuItemPk(List<String> menuItemPk, Long rolePk);
	
	/**
	 * 新增角色權限
	 * @param userPk
	 * @param rolePk
	 * @return
	 */
	public int insertRoleUser(List<String> userPk, Long rolePk);
	
	/** 更新角色
	 * @param role
	 * @return
	 */
	public int updateRole(Role role);
	
	/** 刪除角色下所有菜單
	 * @param rolePk
	 * @return
	 */
	public int deleteRoleMenuItemByPk(Long rolePk);
	
	/** 刪除角色下所有用戶
	 * @param rolePk
	 * @return
	 */
	public int deleteRoleUserByPk(Long rolePk);
	
	/**
	 * 根據角色資料查找pk
	 * @param role
	 * @return
	 */
	public Role findRolePkByRole(Role role);
}
